package cz.muni.fi.pa036.kiss.serviceimpl;

import cz.muni.fi.pa036.kiss.Entity.KolejAssembler;
import cz.muni.fi.pa036.kiss.Entity.KolejDTO;
import cz.muni.fi.pa036.kiss.Entity.MajetekKoleje;
import cz.muni.fi.pa036.kiss.Entity.MajetekKolejeAssembler;
import cz.muni.fi.pa036.kiss.Entity.MajetekKolejeDTO;
import cz.muni.fi.pa036.kiss.dao.MajetekKolejeDAO;
import cz.muni.fi.pa036.kiss.service.MajetekKolejeService;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author peter
 */
public class MajetekKolejeServiceImpl implements MajetekKolejeService{

    @Autowired
    private MajetekKolejeDAO majetekDAO;
    @Autowired
    private MajetekKolejeAssembler majetekassembler;
    @Autowired
    private KolejAssembler kolejassembler;
    
    @Transactional
    @Override
    public void create(MajetekKolejeDTO majetek) {
        if (majetek == null) {
            throw new IllegalArgumentException("majetek is null");
        }
        
        if (majetek.getId() != null) {
            throw new IllegalArgumentException("majetek.id is not null");
        }
        MajetekKoleje maj = majetekassembler.createEntityfromDTO(majetek);
        majetekDAO.create(maj);
        majetek.setId(maj.getId());
    }

    @Transactional(readOnly = true)
    @Override
    public MajetekKolejeDTO get(Long id) {
        if (id == null) {
            throw new IllegalArgumentException("majetekKoleje.Id is null");
        }
        
        MajetekKoleje maj = majetekDAO.get(id);
        if (maj == null) {
            return null;
        }        
        return majetekassembler.createDTOfromEntity(maj);
    }

    @Transactional
    @Override
    public void update(MajetekKolejeDTO majetek) {
        if (majetek == null) {
            throw new IllegalArgumentException("majetek is null");
        }        
        if (majetek.getId() == null) {
            throw new IllegalArgumentException("majetek.id is null");
        }
        
        MajetekKoleje maj = majetekassembler.createEntityfromDTO(majetek);
        majetekDAO.update(maj);
    }

    @Transactional
    @Override
    public void remove(MajetekKolejeDTO majetek) {
        if (majetek == null) {
            throw new IllegalArgumentException("majetek is null");
        }        
        if (majetek.getId() == null) {
            throw new IllegalArgumentException("majetek.id is null");
        }
        
        MajetekKoleje maj = majetekassembler.createEntityfromDTO(majetek);
        majetekDAO.remove(maj);
    }

    @Transactional(readOnly = true)
    @Override
    public List<MajetekKolejeDTO> findAll() {
        List<MajetekKoleje> result = majetekDAO.findAll();
        List<MajetekKolejeDTO> dTOList = new ArrayList();
        
        for (MajetekKoleje maj : result) {
            dTOList.add(majetekassembler.createDTOfromEntity(maj));
        }
        return dTOList;
    }

    @Transactional(readOnly = true)
    @Override
    public List<MajetekKolejeDTO> findByKolej(KolejDTO kolej) {
        if (kolej == null) {
            throw new IllegalArgumentException("kolej is null");
        }
        List<MajetekKoleje> result = majetekDAO.findByKolej(kolejassembler.createEntityfromDTO(kolej));
        List<MajetekKolejeDTO> ret = new ArrayList();
        for (MajetekKoleje bp : result) {
            ret.add(majetekassembler.createDTOfromEntity(bp));
        }
        return ret;
    }
    
}
